﻿# 仅供Store版“WeChat for Windows”使用
# 当前目录放到对应的账户的 AppData\Roaming\Tencent\WeChatAppStore\WeChatAppStore Files\<微信账号> 下
# 将所有文件的一个副本移动到 Documents\temp 下
# 其它的移动到 Documents\temp\_dups 下以便一起删除
# 或者使用 -Recycle 参数直接用 Recycle 第三方 Module 的 Remove-ItemSafely 进回收站
# Recycle : Install-Module -Name Recycle

# 已知问题
# 1.如果有重名的不同文件，会移动失败。但不会丢文件。
# 2.使用SHA256判断文件相同仍有风险。

$wxFilesDir = [System.IO.Path]::Combine($PWD.Path, "Files");
if (-not (Test-Path -Path $wxFilesDir)) {
    Write-Error -Message 请放在微信用户目录下
    return
}

$myRecyFlag = $args.Contains("-Recycle") -or $args.Contains("-recycle") -or $args.Contains("-r")

$wxTempDir = [System.IO.Path]::Combine([System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::MyDocuments), "temp");
if (-not (Test-Path -Path $wxTempDir)) {
    New-Item -ItemType Directory -Path $wxTempDir
}
if (-not $myRecyFlag) {
    $myRecyDir = [System.IO.Path]::Combine($wxTempDir, "_dups");
    if (-not (Test-Path -Path $myRecyDir)) {
        New-Item -ItemType Directory -Path $myRecyDir
    }
}

$allFiles = Get-ChildItem -File -Path $wxTempDir, $wxFilesDir | Get-FileHash
$dupFiles = $allFiles | Group-Object -Property Hash
foreach ( $dupFile in $dupFiles ) {
    $copies = $dupFile.Group | Select-Object -Skip 1;
    if ($myRecyFlag) {
        $copies | Remove-ItemSafely
    }
    else {
        $copies | Move-Item -Destination $myRecyDir
    }
    if ( [System.IO.Path]::GetFileName([System.IO.Path]::GetDirectoryName($dupFile.Group[0].Path)) -eq "Files") {
        Move-Item $dupFile.Group[0].Path -Destination $wxTempDir
    }
}
